package cn.good.yan.controller;


import cn.good.yan.feign.PaymentHystrixService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * 演示 - 客户端
 * 1. Hystrix  服务降级
 *             客户端 - 调用服务端，出现卡死、服务端宕机、自己服务端出故障  - 需要服务降级
 *    进行演示：请求：http://localhost/k1/ok/6 ， 正常不会触发 服务降级
 *                  如果服务端宕机了，会触发服务降级，进入服务降级的方法
 *                  如果服务端的接口，特别慢，超时，也会进行熔断处理，进入服务降级的方法，超时时间在yml配置文件配置
 * @author shengren.yan
 * @create 2023-09-20
 */
@Slf4j
@RestController
@RequestMapping("/k1")
public class OrderController {

    // Feign 接口
    @Resource
    private PaymentHystrixService paymentHystrixService;

    // 正常请求 - 服务端的接口
    @GetMapping("/ok/{id}")
    public String paymentInfoOk(@PathVariable("id") Integer id) {
        String result = paymentHystrixService.paymentInfoOk(id);
        return result;
    }

    // 超时请求 - 服务端的接口
    @GetMapping("/timeout/{id}")
    public String paymentInfoTimeOut(@PathVariable("id") Integer id) {
        String result = paymentHystrixService.paymentInfoTimeOut(id);
        return result;
    }

    // 服务熔断 请求 - 服务端的接口
    @GetMapping("/circuit/{id}")
    public String circuit(@PathVariable("id") Integer id) {
        String result = paymentHystrixService.circuit(id);
        return result;
    }


}

